// Package initialize 所有初始化聚合包
package initialize

import (
	"flag"
	"fmt"
	"os"

	"gin-vue-admin/global"

	"github.com/spf13/viper"
)

// InitViper 初始化配置
// 支持环境变量 APP_ENV 或命令行参数 --env 指定环境
func InitViper() {
	// 获取环境
	env := getEnv()

	// 设置配置文件
	viper.SetConfigName("application-" + env)
	viper.SetConfigType("yaml")
	viper.AddConfigPath("./conf")

	// 支持环境变量覆盖
	viper.AutomaticEnv()

	// 读取配置
	if err := viper.ReadInConfig(); err != nil {
		fmt.Printf("读取配置文件失败: %v\n", err)
		os.Exit(1)
	}

	// 解析到全局配置
	if err := viper.Unmarshal(&global.CONFIG); err != nil {
		fmt.Printf("解析配置失败: %v\n", err)
		os.Exit(1)
	}
	fmt.Printf("配置加载成功: %s 环境\n", env)
}

// getEnv 获取运行环境
func getEnv() string {
	// 命令行参数优先
	env := flag.String("env", "", "运行环境")
	flag.Parse()
	if *env != "" {
		return *env
	}

	// 环境变量
	if env := os.Getenv("APP_ENV"); env != "" {
		return env
	}

	// 默认开发环境
	return "dev"
}
